/**
 * 初始化列表
 * 作用: 在构造函数中设置属性的默认值
 * 时机: 在构造函数体执行之前执行
 * 语法: 使用逗号分隔初始化表达式
 * 场景: 常用于设置final常量的值
 */
class Point {
  double? x, y, z;
  // 默认3维初始化
  Point(this.x, this.y, this.z);
  // 初始化列表特殊用法(重定向构造函数)
  Point.toPoint2D(double x, double y) : this(x, y, 0);

  get getPointInfoPrint {
    print('x: ${x};y: ${y};z: ${z}');
  }

  set setX(double x) {
    this.x = x;
  }

  set setY(double Y) {
    this.y = Y;
  }

  set setZ(double z) {
    this.z = z;
  }
}

void main() {
  // 普通3d point
  Point p1 = Point(10, 20, 50);
  print('x: ${p1.x};y: ${p1.y};z: ${p1.z}');

  // 2D
  Point p2 = Point.toPoint2D(10, 50);
  print('x: ${p2.x};y: ${p2.y};z: ${p2.z}');
}
